package cn.itcast.goods.cart.service;

import java.sql.SQLException;
import java.util.List;

import cn.itcast.goods.cart.dao.CartItemDao;
import cn.itcast.goods.cart.domain.CartItem;
import cn.itcast.jdbc.JdbcUtils;

public class CartItemService {

	private CartItemDao cartItemDao = new CartItemDao();
	/**
	 * 查看我的购物车
	 * @param uid
	 * @return
	 */
	public List<CartItem> mycart(String uid){
		
		try{
			return cartItemDao.findByUser(uid);
		}catch(Exception e) {
			throw new RuntimeException(e);
		}
	}
	/**
	 * 向购物车中添加条目
	 * @param cartItem
	 */
	public void add(CartItem cartItem) {
		// TODO Auto-generated method stub
		//查询这个条目是否已经存在，如果存在就合并条目，而不是添加新的条目
		try {
			JdbcUtils.beginTransaction();
			CartItem _cartItem = cartItemDao.findByUserAndBook(cartItem.getOwner().getUid(),cartItem.getBook().getBid());
			if(_cartItem == null){
				//如果原来不存在这一条目，那么添加条目
				cartItemDao.add(cartItem);
			}else{
				//如果原来存在这一条目，那么把原条目和新条目的数量合并，然后修改条目的数量
				int quantity = cartItem.getQuantity() + _cartItem.getQuantity();
				cartItemDao.updateQuantity(_cartItem.getCartitemid(),quantity);
			}
			JdbcUtils.commitTransaction();
		} catch (SQLException e) {
		    try{
		    	JdbcUtils.rollbackTransaction();
		    }catch(Exception e1){
		    	throw new RuntimeException(e1);
		    }
		    throw new RuntimeException(e);
		}
		
		
	}
	/**
	 * 删除购物车中的条目
	 * @param cartItemIds
	 */
	public void deleteBatch(String cartItemIds) {
		// TODO Auto-generated method stub
		try{
			cartItemDao.deleteBatch(cartItemIds);
		}catch(Exception e){
			throw new RuntimeException(e);
		}
        
		
	}
	
	/**
	 * 跟新购物车中条目的数量
	 * @param cartItemId
	 * @param quantity
	 */
	public void updateQuantity(String cartItemId, int quantity) {
		// TODO Auto-generated method stub
		try {
			cartItemDao.updateQuantity(cartItemId,quantity);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 根据cartItemId加载当前条目
	 * @param cartItemId
	 * @return
	 */
	public CartItem load(String cartItemId) {
		// TODO Auto-generated method stub
		
		try {
			return cartItemDao.load(cartItemId);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 循环显示所有的条目
	 * @param cartItemIds
	 * @return
	 */
	public List<CartItem> loadCartItems(String cartItemIds) {
		// TODO Auto-generated method stub
		
		try {
			return cartItemDao.loadCartItems(cartItemIds);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
	}
}
